<?php


namespace app\common\validate;

use think\Validate;

/**
 * Created by PhpStorm
 * USER zhangkai QQ 920062039
 * Date 2022/5/11   21:24
 */
class ValidateBase extends Validate
{
    /**
     * @param $value
     * @param $rule
     * 验证枚举的值是否符合要求
     */
    protected function checkEnumValid($value, $rule){
        $result = false;
        $objClass = new \ReflectionClass($rule);
        $arrConst = $objClass->getConstants();
        foreach ($arrConst as $key => $val)
        {
            $val == $value && $result = true;
        }
        return $result;
    }

    /**
     * @param $value
     * @param array $rule
     * 因为官方文档的说明和实际框架的实现不一样，不想用他的unique方法了，这里的使用方法参考 app\common\validate\User
     * 判断数据库记录是否唯一
     * @var string $rule['table'] 表名
     * @var string $rule['where'] 额外的where条件，和官方的where数组写法一样
     */
    protected function checkUnique($value, array $rule, $data, string $field = ''): bool
    {
        $db = $this->db->name($rule['table']);
        $pk = $db->getPk();
        $where = [
            $field=>$value
        ];

        // 如果用户自定义了查询条件的话，合并where
        !empty($rule['where']) && $where = array_merge($where,$rule['where']);

        $db = $db->where($where)->field($pk);

        !empty($data[$pk]) && $db->where($pk,'<>',$data[$pk]);

        if ($db->find()) {
            return false;
        }
        return true;
    }
}